﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;
using System.Web.Security;
using System.Xml.Serialization;
using System.IO;
using CapokunMvcTest.Models;

namespace CapokunMvcTest.Controllers
{
	public class AccountController : Controller
	{

		//
		// GET: /Account/LogOn

		public ActionResult LogOn()
		{
			return View();
		}

		//
		// POST: /Account/LogOn

		[HttpPost]
		public ActionResult LogOn(LogOnModel model, string returnUrl)
		{
			if (ModelState.IsValid)
			{
				if (Membership.ValidateUser(model.UserName, model.Password))
				{
					FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);
					if (Url.IsLocalUrl(returnUrl) && returnUrl.Length > 1 && returnUrl.StartsWith("/")
						&& !returnUrl.StartsWith("//") && !returnUrl.StartsWith("/\\"))
					{
						return Redirect(returnUrl);
					}
					else
					{
						return RedirectToAction("Index", "Home");
					}
				}
				else
				{
					ModelState.AddModelError("", "The user name or password provided is incorrect.");
				}
			}

			// If we got this far, something failed, redisplay form
			return View(model);
		}

		////
		//// GET: /Account/LogOff

		//public ActionResult LogOff()
		//{
		//    FormsAuthentication.SignOut();

		//    return RedirectToAction("Index", "Home");
		//}

		////
		//// GET: /Account/Register

		//public ActionResult Register()
		//{
		//    return View();
		//}

		////
		//// POST: /Account/Register

		//[HttpPost]
		//public ActionResult Register(RegisterModel model)
		//{
		//    if (ModelState.IsValid)
		//    {
		//        // Attempt to register the user
		//        MembershipCreateStatus createStatus;
		//        Membership.CreateUser(model.UserName, model.Password, model.Email, null, null, true, null, out createStatus);

		//        if (createStatus == MembershipCreateStatus.Success)
		//        {
		//            FormsAuthentication.SetAuthCookie(model.UserName, false /* createPersistentCookie */);
		//            return RedirectToAction("Index", "Home");
		//        }
		//        else
		//        {
		//            ModelState.AddModelError("", ErrorCodeToString(createStatus));
		//        }
		//    }

		//    // If we got this far, something failed, redisplay form
		//    return View(model);
		//}

		////
		//// GET: /Account/ChangePassword

		//[Authorize]
		//public ActionResult ChangePassword()
		//{
		//    return View();
		//}

		////
		//// POST: /Account/ChangePassword

		//[Authorize]
		//[HttpPost]
		//public ActionResult ChangePassword(ChangePasswordModel model)
		//{
		//    if (ModelState.IsValid)
		//    {

		//        // ChangePassword will throw an exception rather
		//        // than return false in certain failure scenarios.
		//        bool changePasswordSucceeded;
		//        try
		//        {
		//            MembershipUser currentUser = Membership.GetUser(User.Identity.Name, true /* userIsOnline */);
		//            changePasswordSucceeded = currentUser.ChangePassword(model.OldPassword, model.NewPassword);
		//        }
		//        catch (Exception)
		//        {
		//            changePasswordSucceeded = false;
		//        }

		//        if (changePasswordSucceeded)
		//        {
		//            return RedirectToAction("ChangePasswordSuccess");
		//        }
		//        else
		//        {
		//            ModelState.AddModelError("", "The current password is incorrect or the new password is invalid.");
		//        }
		//    }

		//    // If we got this far, something failed, redisplay form
		//    return View(model);
		//}

		////
		//// GET: /Account/ChangePasswordSuccess

		//public ActionResult ChangePasswordSuccess()
		//{
		//    return View();
		//}

		/// <summary>
		/// show all songs
		/// </summary>
		/// <param name="id"></param>
		/// <returns></returns>
		public ActionResult Admin()
		{
			//CapokunContext.
			return View(CapokunContext.GetAllSongs());
			//return View((object)null);
		}

		[HttpPost]
		public ActionResult Admin(Song anything)
		{
			this.fillSqlFromXml();
			return View();
		}

		private void fillSqlFromXml()
		{
			List<Song> currentSongs = new List<Song>();
			currentSongs = CapokunContext.GetAllSongs().ToList();

			List<Song> songsFromXml = deserializeFromXML("CapoSongs.xml");
			foreach (var song in songsFromXml)
			{
				if (!currentSongs.Contains(song))
				{
					CapokunContext.CreateSong(song);
				}
			}


			//List<Song> currentSongs = new List<Song>();
			////currentSongs = CapokunContext.GetAllSongs();

			//List<Song> duplicateSong = new List<Song>();
			//Dictionary<string, Song> songBySongId = new Dictionary<string, Song>();

			////var account = CloudStorageAccount.FromConfigurationSetting("SongDataConnectionString");
			////var context = new SongDataServiceContext(account.TableEndpoint.ToString(), account.Credentials);

			/////fill db
			////List<Song> songs = SongDataServiceContext.GetAllSongs();

			////foreach (var song in songs)
			////{
			////    context.AddSong(song.SongId, song.Link, song.Content, song.SubmittedBy);
			////}

			/////clean duplicates
			//foreach (var song in currentSongs)
			//{
			//    if (songBySongId.ContainsKey(song.SongId))
			//    {
			//        duplicateSong.Add(song);
			//    }
			//    else
			//    {
			//        songBySongId.Add(song.SongId, song);
			//    }
			//}



			//foreach (var song in duplicateSong)
			//{
			//    CapokunContext.DeleteSong(song.SongId);
			//}


			////this.SongList.DataSource = context.Songs;
			////this.SongList.DataBind();

		}

		private List<Song> deserializeFromXML(string fileName)
		{
			List<Song> songs = new List<Song>();
			string xmlpath = Server.MapPath(Url.Content("~/Content/" + fileName));

			if (System.IO.File.Exists(xmlpath))
			{
				XmlSerializer deserializer = new XmlSerializer(typeof(List<Song>));
				TextReader textReader = new StreamReader(xmlpath);
				songs = (List<Song>)deserializer.Deserialize(textReader);
				textReader.Close();
			}
			return songs;

		}
	}

}

